package com.gao.service;

import com.gao.vo.Base64Vo;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author gao
 * @date 2023/05/12 23:19:54
 */
public interface FileService {
    /**
     * 单一文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     */
    String uploadFile(MultipartFile file);

    /**
     * 单一base64文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     */
    String uploadBase64File(Base64Vo file);


    /**
     * 由客户端根据文件内容生成MD5格式的文件名
     *
     * @param file     上传的文件
     * @param filename 根据文件内容生成的MD5格式的文件名
     * @return 访问地址
     */
    String uploadSingleFileWithHashFilename(MultipartFile file, String filename);

    /**
     * 上传大文件的分片
     *
     * @param file        客户端上传的文件分片
     * @param hash        根据完整文件生成的hash
     * @param pieceIndex  当前上传的文件分片的索引
     * @param totalPieces 文件分片的总数
     * @param suffix      文件后缀
     * @return 分片索引，如果大文件上传完毕，则返回大文件的访问地址
     */
    String uploadBigFile(MultipartFile file, String hash, int pieceIndex, int totalPieces, String suffix);

    /**
     * 返回指定hash所对应的大文件下一个应该上传的分片
     *
     * @param hash
     * @param totalPieces
     * @return
     */
    int getIndexToUpload(String hash, int totalPieces);
}
